#ifndef TIMER_H
#define TIMER_H

#include <stdint.h>

// RISC-V 时钟频率 (QEMU默认为10MHz)
#define CLOCK_FREQ 10000000UL

// 默认定时器间隔 (1秒)
#define TIMER_INTERVAL_DEFAULT (CLOCK_FREQ)

// 时钟中断的PLIC中断号
#define IRQ_M_TIMER 7

// 时钟相关MMIO寄存器地址 (QEMU virt板)
#define CLINT_BASE 0x2000000UL
#define CLINT_MTIME (CLINT_BASE + 0xBFF8)
#define CLINT_MTIMECMP(hartid) (CLINT_BASE + 0x4000 + 8*(hartid))

// 定时器初始化
void timer_init(void);

// 设置下一次定时器触发的时间间隔 (以时钟周期为单位)
void timer_set(uint64_t interval);

// 获取当前时钟计数
uint64_t timer_read(void);

// 定时器中断处理函数
void timer_handler(void);

// 计算CPU执行的指令数 (大约值)
unsigned long timer_uptime_ms(void);

#endif
